<?php

namespace think\exception;

use Psr\Container\NotFoundExceptionInterface;
use RuntimeException;
use Throwable;


// +----------------------------------------------------------------------
// | 所属:异常处理
// | (愿景,目的) 名称:方法异常处理类
// | 功能:  
// | (心智)原则: 单一职责原则/依赖倒置原则/开闭原则
// | 结构组成: 
// | (形式) 类模式: 抽象类/多重继承
// | (模式)模式类型: 结构类
// | (模式)设计模式: 代理模式
// | 产生事件:
// | Understand:Cluster | Cluster Call Butterfly
// |
// | ---------分析--------------
// | 需求的产生 想法
// | 道: <用户-客户立场>|<人的视角>(欲望)
// | 愿景:  规范处理异常
// | 目的:  基础的底层异常处理
// |
// | =============================
// | 需求的分解--架构-偏商业架构/业务角度
// | 制定设置规则的原则
// | 法: <组织内部立场>|<人的视角>
// | 如何适应新的应用场景
// | 适用场景:
// | 目的: 基类异常时抛出错误
// | 心智:遵循思维模式,原则
// | 结构:
// | 协议: 继承 SPL 框架处理
// |
// | =============================
// | 术:<组织内部立场>|<物的视角>
// | 用户/客户立场:(人的视角)(结果)感知
// | 形式:定义了整个项目的文件目录形式,各目录文件功能
// |
// | 组织内部立场:(物的视角)(设定)系统思考.逻辑思考
// | 结构:
// |
// | 协议:
// |
// | =============================
// | 方案实施 执行 怎么用
// | 器:<物的视角>
// | 对什么场景下的哪个业务节点.有什么资源方法和模式可用
// | (转换接口,把物和人联系起来)
// | 形式:
// |
// | (用户/客户立场|视角|(背后是结构)
// | 模式:
// |
// | (具体方法)
// | 事件:
// | -------------------------
// |
// | 知识点: 使用接口方式多重继承 其他类
// | 继承类说明: 继承语言运行异常类并继承了标准方法异常接口
// | 点评:  其实也就是代理通道,把消息通知给语言内置类处理
// |
// +----------------------------------------------------------------------


/**
 * 方法异常处理类
 */
class FuncNotFoundException extends RuntimeException implements NotFoundExceptionInterface
{
    protected $func;

    public function __construct(string $message, string $func = '', Throwable $previous = null)
    {
        $this->message = $message;
        $this->func   = $func;

        parent::__construct($message, 0, $previous);
    }

    /**
     * 获取方法名
     * @access public
     * @return string
     */
    public function getFunc()
    {
        return $this->func;
    }
}
